package com.hhkj.api.train.service.biz;

import com.hhkj.admin.course.domain.Course;
import com.hhkj.admin.train.domain.Train;
import com.hhkj.api.train.model.info.req.TrainStageReq;
import com.hhkj.api.train.model.info.req.TrainSubmitReq;
import com.hhkj.api.train.model.info.res.*;

import java.util.List;

/**
 * ApiTrainService
 *
 * @author HHKJ-SERVER-ZJ
 * @since 2023/5/24 16:04
 */
public interface ApiTrainBizService
{
    /**
     * 根据题库id获取模拟考试练习信息
     *
     * @return 培训自由练习信息
     */
    ApiTrainTestRes startTrainByBankId(Long bankId);

    /**
     * 获取题库信息
     *
     * @return 题库信息获取
     */
    TrainBankRes getPractiseBank();

    /**
     * 获取培训信息
     *
     * @param id 培训id信息
     * @return 培训完批改信息
     */
    TrainCorrectRes getCorrectResById(Long id);

    /**
     * 提交答案
     *
     * @param req 请求信息
     * @return true/false
     */
    TrainCorrectRes submit(TrainSubmitReq req);

    /**
     * 获取顺序练习考试信息
     *
     * @param modeCode 答题模式:answer、背题模式:recitation
     * @return 培训自由练习信息
     */
    ApiTrainPractiseRes startPractiseTrain(String modeCode);

    /**
     * 获取上次练习考试信息
     *
     * @return 继续练习信息
     */
    ApiTrainContinuePractiseRes continuePractiseTrain();

    /**
     * 获取模拟考试练习信息
     *
     * @return 培训自由练习信息
     */
    ApiTrainTestRes startTestTrain();

    /**
     * 获取最新的培训信息
     *
     * @param typeCode 做题类型 practice练习 test考试
     * @return 培训信息
     */
    Train getLastTrain(String typeCode);

    /**
     * 获取当前学员的科目信息详情
     *
     * @return 科目详情
     */
    Course getCourse();

    /**
     * 获取当前学员对应练习模式
     *
     * @return 练习模式列表
     */
    List<String> listPractiseModeCode();

    /**
     * 暂存答案
     * @param req
     */
    void stage(TrainStageReq req);

    /**
     * 暂存后继续联系
     * @return
     */
    ApiTrainContinuePractiseRes stageContinuePractiseTrain();
}
